package com.atguigu.gulimall.gateway.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.reactive.CorsWebFilter;
import org.springframework.web.cors.reactive.UrlBasedCorsConfigurationSource;

@Configuration
public class GulimallCorsConfiguration {

    /**
     * springboot提供的CorsWebFilter可以用来解决跨域问题
     * 直接将其实例通过@Bean注解注入到spring容器,并添加相应配置即可
     */
    @Bean
    public CorsWebFilter filter() {
        //在创建实例时发现其构造器需要传入一个CorsConfigurationSource接口的实例,
        // 我们可以通过ctrl+H找到其对应的实现(UrlBasedCorsConfigurationSource),然后传入其实现类的对象即可
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();

        //配置允许任何请求头,请求来源,请求方法访问并可以携带凭证即cookie
        CorsConfiguration configuration = new CorsConfiguration();
        configuration.addAllowedOrigin("*");
        configuration.addAllowedMethod("*");
        configuration.addAllowedHeader("*");
        configuration.setAllowCredentials(true);

        //在注册配置时发现注册方法需要两个参数,一个是路径,一个是CorsConfiguration,因此我们提前创建其实例
        source.registerCorsConfiguration("/**", configuration);

        return new CorsWebFilter(source);
    }


}
